﻿/**
 * 在一个数组上做游戏，每一步：
 *   拿出Ai和Aj，放进(Ai+Aj)/2*2
 * 当数组只剩一个数游戏结束
 * 先手希望该数尽可能大，后手尽可能小
 * 给定数组A，依次对A的每一个前缀进行该游戏，输出游戏结果
 * 显然只有一奇一偶才会损失1，否则收益不变，因此跟奇数的数量有关
 * 令i为奇数的数量，Di为损失的值，则当i较大时，有 Di = D[i - 3] + 1
 * 所以扫描一遍，记录前缀和，以及奇数的数量，减去损失值即可
 */
#include <bits/stdc++.h>
using namespace std;

#include <bits/extc++.h>
using namespace __gnu_pbds;

using llt = long long;
using vi  =vector<int>;
using pii = pair<int, int>;
using vvi = vector<vi>;
using vpii = vector<pii>;

vector<llt> D;
void init(){
    D.assign(100000+1, 0);
    D[1] = D[3] = 1; D[2] = 0;
    for(int i=4;i<100000;++i){
        D[i] = D[i - 3] + 1;
    }
}

int N, M, Q, K;
vi A;

void proc(){
    // vi c(N + 1, 0);
    // vector<llt> s(N + 1, 0);
    cout << A[1];
    llt s = A[1];
    int c = (A[1] & 1) ? 1 : 0;
    for(int i=2;i<=N;++i){
        if(A[i] % 2) c += 1;
        s += A[i];
        cout << " " << s - D[c];
    }
    cout << "\n";
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(0);
    init();
    int nofkase = 1;
    cin >> nofkase;
    while(nofkase--){
        cin >> N;
        A.assign(N + 1, {});
        for(int i=1;i<=N;++i) cin >> A[i];
        proc();
    }
    return 0;
}